package com.bawei.es.controller;

import com.bawei.common.core.domain.R;
import com.bawei.system.domain.vo.EsDocDelVo;
import com.bawei.system.domain.vo.IndexDetailsVO;
import com.bawei.es.service.EsIndexService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Map;

@RestController
@RequestMapping("/esIndex")
@Api(value = "ES索引管理",tags = "ES索引管理")
public class EsIndexController {

    @Autowired
    private EsIndexService service;

    /**
     * 根据索引名称创建索引
     *
     * @return
     */
    @GetMapping("/create")
    @ApiOperation(value = "根据索引名称创建索引")
    public R<Boolean> indexCreate(String indexName) {
        return service.indexCreate(indexName);
    }

    /**
     * 根据索引名称、映射结构创建索引
     *
     * @return
     */
    @GetMapping("/createWithMapping")
    @ApiOperation(value = "根据索引名称、映射结构创建索引")
    public R<Boolean> indexCreateWithMapping(String indexName, String indexMapping) {
        return service.indexCreateWithMapping(indexName,indexMapping);
    }

    /**
     * 根据索引名称查询索引是否存在
     *
     * @return
     */
    @GetMapping("/indexExit")
    @ApiOperation(value = "根据索引名称查询索引是否存在")
    public R<Boolean> indexExit(String indexName) {
        return service.indexExit(indexName);
    }

    /**
     * 2.根据索引名称删除索引
     *
     * @return
     */
    @GetMapping("/indexDelete")
    @ApiOperation(value = "根据索引名称删除索引")
    public R<Boolean> indexDelete(String indexName) {
        return service.indexDelete(indexName);
    }

    /**
     * 根据索引名称获取mapping
     *
     * @return
     */
    @GetMapping("/indexGetMapping")
    @ApiOperation(value = "根据索引名称查询")
    public R<Map> indexGetMapping(String indexName) {
        return service.indexGetMapping(indexName);
    }

    /**
     * 根据索引名称、映射结构创建索引
     *1.在现有的创建索引的接口要加上settings
     * @return
     */
    @PostMapping("/indexCreat")
    @ApiOperation(value = "根据索引名称、映射结构创建索引")
    public R<Boolean> indexCreat(@RequestBody IndexDetailsVO vo) {
        return service.indexCreat(vo);
    }

    /**
     * 4.添加一个修改索引接口，要可以修改已有的mappings映射，比如增加一个字段、删除一个字段等
     * @param indexName
     * @param mappings
     * @return
     */
    @GetMapping("updateIndex")
    @ApiOperation(value = "修改索引接口")
    public R updateIndex(@RequestParam String indexName,@RequestParam Map<String,Object> mappings){
        return service.updateIndex(indexName,mappings);
    }

    /**
     * 添加一个根据索引名称查询详情（返回setting、mapping）
     * @return
     */
    @GetMapping("/getMapping")
    @ApiOperation(value = "根据索引名称获取mappings和setting")
    public R<Map<String,Object>> getMapping(String indexName) {
        return service.getMapping(indexName);
    }

    /**
     * 根据索引名称修改索引mapping映射
     * @param vo
     * @param flag
     * @return
     */
    @PostMapping("/update")
    @ApiOperation(value = "根据索引名称修改索引mapping映射")
    public R update(@RequestBody IndexDetailsVO vo, @RequestParam Integer flag) {
        service.update(vo,flag);
        return R.ok();
    }

    /**
     * 根据索引名称获取mapping setting
     *
     * @return
     */
    @GetMapping("/get")
    @ApiOperation(value = "根据索引名称查询索引配置和映射")
    public R<IndexDetailsVO> get(@RequestParam String indexName) {
        return R.ok(service.get(indexName));
    }

    /**
     * 根据索引名称、映射结构创建索引
     *
     * @return
     */
    @PutMapping("/createIndex")
    @ApiOperation(value = "根据索引名称、映射结构创建索引")
    public R createIndex(@RequestBody IndexDetailsVO vo) {
        service.createIndex(vo);
        return R.ok();
    }

    /**
     * 根据索引名称、映射结构创建索引
     *
     * @return
     */
    @PutMapping("/create")
    @ApiOperation(value = "根据索引名称、映射结构创建索引")
    public R create(@RequestBody IndexDetailsVO vo) {
        service.create(vo);
        return R.ok();
    }

    /**
     * 删除相对应的索引
     * @param esDocDelVo
     * @return
     */
    @PostMapping("/delEs")
    public R indexdel(@RequestBody EsDocDelVo esDocDelVo){
        return service.indexDel(esDocDelVo);
    }

    /**
     * 创建查询所有索引的方法
     */
    @GetMapping("selectAllIndexs")
    @ApiOperation(value = "查询所有索引")
    public R<List<String>> selectAllIndexs(){
        List<String> list = service.selectAllIndexs();
        return R.ok(list);
    }

}
